package proyectoprogra3;
import java.awt.BorderLayout;
import java.awt.CardLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.Serializable;
import javax.swing.*;
import javax.swing.border.TitledBorder;
/**
 * 
 * @author Cáceres Cristóbal
 */
public class Pregunta extends JPanel implements ActionListener,Serializable{
    
    
    /**
     * Todo se va a guardar en el panel principal el cual vamos a
     * enviar a dibujar en la otra ventana donde se muestra el 
     * cuestionario completo tambien en pnl3 vamos a cargar
     * el tipo de pregunta segun sea el caso seleccionado en el combo box
     * para ello utilizaremos paneles ya predefinidos en otras clases
     */
    private JPanel pnlTotal, pnl1,pnl2,pnl3,pnl4,pnlPreguntaFinal,pnNorte;
    /**
     * En el pnl1 vamos a tener las opciones para escribir el titulo
     * de la pregunta y tambien seleccionar el tipo de pregunta
     * de acuerdo a esto en el pnl3 se dibuja el tipo de pregunta
     */
    private JLabel lblTituloPregunta,lblTipoPregunta;
    private JTextField txtTituloPregunta;
    private JComboBox cmTipoRespuesta;
    private DefaultComboBoxModel cbMoldelo;
    /**
     * El btnOK nos va a servir para controlar si la pregunta se agrega o no
     * a la lista de preguntas guardadas
     */
    private JButton btnOK,btnEliminar;
    /**
     * (Contenido en el pnl4) con el chObligatorio vamos a poder controlar si la pregunta se tiene 
     * que responder obligatoriamente o no en el cuestionario final
     * se va a utilizar con una funcion de control de la otra ventana
     */
    private JCheckBox chObligatorio;
    /**
     * (Contenido en el pnl4) Con el cmTipoRespuesta vamos a poder controlar cuando y que se tiene que
     * dibujar en el pn3 que va a contener todo el formato del tipo de respuesta
     * que se desea para esa pregunta... aqui vamos a tener un action listener
     * para poder comprobar ese tipo de eventos...
     */
    private JToggleButton tbntEditar;
    /**
     * tbntEditar y tbntEliminar van a servir para manerjar actionlistener generales....
     * (aun no comprobado...)
     */
    
    /*Para cambios de paneles en el CardLayout*/
    private JPanel pnTexto ,pnArea,pnEleccion,pnVerificacion,pnLista,pnEscala,pnTabla ;
    /*
     * Para poder hacer un cambio general... necesitamos 2 grandes paneles,
     * el primero para mostrar cuando se esta editando la pregunta y el otro para mostrar
     * la pregunta ya final ,
     */
    
    
    /*
     * pnlActivo se lo va a utilizar para poder mostrar o no una pregunta activa para edicion
     */
    private JPanel pnActivo;
    
    
    public Pregunta() {

        /**
         * Contenido del panel 1 
         * 
         * Labels: Titulo pregunta y tipo pregunta
         * Textfield: Titulo pregunta
         * ComboBox: Seleccion de tipo respuesta
         *          Texto Rapido : JTextField
         *          Parrafo de Texto : JTextArea
         *          Casilla de Verificacion : LinkedList<JChecBox> 
         *          Elegir de una Lista : JComboBox
         *          Escala : LinkedList<JRadioButton> (valores de 1 - 10 )
         *          Cuadricula : JTable
         */                
        this.lblTituloPregunta = new JLabel("Titulo de la pregunta");
        this.lblTituloPregunta.setSize(150, 40);
        this.txtTituloPregunta = new JTextField(30);
        this.lblTipoPregunta = new JLabel("Tipo de respuesta");
        this.lblTipoPregunta.setSize(150, 40);
        this.cmTipoRespuesta = new JComboBox();
        this.cbMoldelo = new DefaultComboBoxModel();
        this.cbMoldelo.addElement("Texto Rapido");
        this.cbMoldelo.addElement("Parrafo de Texto");
        this.cbMoldelo.addElement("Casillas de Verificacion");
        this.cbMoldelo.addElement("Casillas de Seleccion multiple");
        this.cbMoldelo.addElement("Elegir de una Lista");
        this.cbMoldelo.addElement("Escala");
        this.cbMoldelo.addElement("Cuadricula");
        this.cmTipoRespuesta.setModel(cbMoldelo);
        this.cmTipoRespuesta.addActionListener(this);
        this.pnl1 = new JPanel();
        this.pnl1.setSize(200,100);
        this.pnl1.setLayout(new GridLayout(2,2));
        this.pnl1.add(lblTituloPregunta);
        this.pnl1.add(txtTituloPregunta);
        this.pnl1.add(lblTipoPregunta);
        this.pnl1.add(cmTipoRespuesta);
        
        /**
         * Contenido del panel 3
         * Se va a agregar todos los paneles de preguntas... 
         * El valor por defecto Texto Rapido....
         * Contenido cambia de acuerdo al combobox
         */
        this.pnTexto = new PTextField();
        this.pnArea = new PTextArea();
        this.pnEleccion = new PJRadioButton();
        this.pnVerificacion = new PJCheckBox();
        this.pnLista = new PJComboBox();
        this.pnEscala = new PJEscala();
        this.pnTabla = new PJTable();
        this.pnl3 = new JPanel(new CardLayout());
        this.pnl3.add(pnTexto,"0");
        this.pnl3.add(pnArea,"1"); 
        this.pnl3.add(pnEleccion,"2");
        this.pnl3.add(pnVerificacion,"3"); 
        this.pnl3.add(pnLista,"4"); 
        this.pnl3.add(pnEscala,"5"); 
        this.pnl3.add(pnTabla,"6"); 
        
        
        /**
         * Contenido del panel 4
         */
        this.pnl4 = new JPanel();
        this.chObligatorio = new JCheckBox("Hacer Obligatoria esta Pregunta");
        this.btnOK = new JButton("OK");
        this.btnOK.addActionListener(this);
        this.pnl4.add(this.btnOK);
        this.pnl4.add(this.chObligatorio);
        
        /**
         * Acontinuacion solo agregamos los paneles auxiliares al panel principal
         */
        this.pnlTotal = new JPanel();
        this.pnlTotal.setSize(650,400);
        this.pnlTotal.setLayout(new BorderLayout());
        this.pnlTotal.add(pnl1,BorderLayout.NORTH);
        this.pnlTotal.add(pnl3,BorderLayout.CENTER);
        this.pnlTotal.add(pnl4,BorderLayout.SOUTH);
        
        /**
         * Vamos a tener un panel en el cual grabemos la pregunta final para 
         * poder ponerlo en el cuestionario... directamente....
         * Este panel se va a rellenar cuando demos click en OK
         */
//        this.pnlPreguntaFinal = new JPanel();
        this.pnTexto = new PTextField();
        this.pnArea = new PTextArea();
        this.pnEleccion = new PJRadioButton();
        this.pnVerificacion = new PJCheckBox();
        this.pnLista = new PJComboBox();
        this.pnEscala = new PJEscala();
        this.pnTabla = new PJTable();
        this.pnlPreguntaFinal = new JPanel(new CardLayout());
        this.pnlPreguntaFinal.add(pnTexto,"0");
        this.pnlPreguntaFinal.add(pnArea,"1"); 
        this.pnlPreguntaFinal.add(pnEleccion,"2");
        this.pnlPreguntaFinal.add(pnVerificacion,"3"); 
        this.pnlPreguntaFinal.add(pnLista,"4"); 
        this.pnlPreguntaFinal.add(pnEscala,"5"); 
        this.pnlPreguntaFinal.add(pnTabla,"6"); 
        this.pnActivo = new JPanel(new CardLayout());
        this.pnActivo.add(pnlTotal,"activado");
        this.pnActivo.add(pnlPreguntaFinal,"desactivado"); 
        
        /*
         * Panel para poder controlar si elimina o edita la pregunta....
         */
        
        this.tbntEditar = new JToggleButton(new ImageIcon("Options.png"));//icono editar...
        this.tbntEditar.setSelected(false);   
        this.tbntEditar.addActionListener(this);
        this.btnEliminar = new JButton(new ImageIcon("Trash.png"));//icono eliminar...
        this.btnEliminar.addActionListener(this);
        
        this.pnNorte = new JPanel();
        this.pnNorte.setLayout(new BoxLayout(pnNorte,BoxLayout.X_AXIS));
        this.pnNorte.add(tbntEditar);
        this.pnNorte.add(btnEliminar);
        
        this.pnl2 = new JPanel();
        this.pnl2.setLayout(new BoxLayout(pnl2,BoxLayout.Y_AXIS) );
        this.pnl2.add(pnNorte);
        this.pnl2.add(pnActivo); 
        
        this.add(pnl2);
        this.setBorder(new TitledBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY),"Pregunta"));
        Rellena();
        
    }

    /**
     * Me va a servir para poder devolver los ActionListener
     */
    public JComboBox getCmTipoRespuesta() {
        return cmTipoRespuesta;
    }    
    
    
    public JPanel getPnlTotal() {
        return pnlTotal;
    }    

    /**
     * Nos va a devolver todo el panel, asi vamos a poder visualizarlo en la otra ventana
     * de manera mas sencilla... 
     */
    public JPanel getPnlPreguntaFinal() {
        return pnlPreguntaFinal;
    }

    public void setEditable(boolean f){
        this.tbntEditar.setSelected(f);
    }
    public boolean isEditable(){
        return this.tbntEditar.isSelected();
    }
    
    /**
     * Devuelve el valor true si esta seleccionado el check box obigatorio
     * caso contrario false...
     */
    public boolean isObligatorio() {
        return chObligatorio.isSelected();
    }

    /**
     * Eventos para manejar el combobox
     */
    public void Rellena(){
   
        CardLayout card1 = (CardLayout) pnActivo.getLayout();
        card1.show(pnActivo, tbntEditar.isSelected() ? "activado":"desactivado");
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource().equals(btnOK)){
            tbntEditar.setSelected(false);
            Rellena();
       }else if(e.getSource().equals(cmTipoRespuesta)){
            CardLayout card = (CardLayout) pnl3.getLayout();
            CardLayout card1 = (CardLayout) pnlPreguntaFinal.getLayout();
            switch(cmTipoRespuesta.getSelectedIndex()){
                case 0: card.show(pnl3,"0");    card1.show(pnlPreguntaFinal,"0");    break;
                case 1: card.show(pnl3,"1");    card1.show(pnlPreguntaFinal,"1");    break;
                case 2: card.show(pnl3,"2");    card1.show(pnlPreguntaFinal,"2");    break;
                case 3: card.show(pnl3,"3");    card1.show(pnlPreguntaFinal,"3");    break;
                case 4: card.show(pnl3,"4");    card1.show(pnlPreguntaFinal,"4");    break;
                case 5: card.show(pnl3,"5");    card1.show(pnlPreguntaFinal,"5");    break;
                case 6: card.show(pnl3,"6");    card1.show(pnlPreguntaFinal,"6");    break;
            }
        }else if(e.getSource().equals(tbntEditar)){
            Rellena();
        }else if(e.getSource().equals(btnEliminar)){
          JOptionPane.showMessageDialog(this,"Archivo Vacio"); 
        }
    }   
}
